"""
用户功能接口
"""
import logging

from db.db_handler import is_user_exist, save, read
from lib.common import get_md5_value

loger = logging.getLogger(__name__)


def register_interface(username, password, balance=10000.0):
    """
    用户注册接口
    :param username: 用户名
    :param password: 密码
    :param balance: 默认账号余额10000
    :return: None
    """
    # 密码加密
    password_md5, pass_salt = get_md5_value(password)
    user_dict = {
        'username': username,
        'password': password_md5,
        'pass_salt': pass_salt,
        'balance': balance,
        'flow': [],
        'shop_cart': [],
        'locked': False,
        'is_admin': False
    }
    # 保存用户
    save(user_dict)
    loger.info(f'{username}注册成功！')


def login_interface(username, password, is_admin_login=False):
    """
    登录接口，默认为非管理员登录
    :param username: 用户名
    :param password: 密码
    :param is_admin_login: 是否为管理员登录
    :return: 用户字典
    """
    # 用户不存在
    if not is_user_exist(username):
        print('用户文件不存在，请先注册！')
        loger.warning(f'{username}用户文件不存在！')
        return None
    # 读取用户数据
    user_dict = read(username)
    # 用户文件为空
    if not user_dict:
        print('用户文件为空，请练习管理员！')
        loger.warning(f'{username}用户文件为空！')
        return None
    # 校验密码
    login_password, pass_salt = get_md5_value(password, user_dict['pass_salt'])
    if login_password != user_dict['password']:
        loger.warning(f'{username}用户密码错误！')
        print('用户名或密码错误！')
        return None
    # 用户是否锁定，管理员无法被锁定
    if user_dict['locked'] and not user_dict['is_admin']:
        print('该用户已锁定，请联系管理员！')
        return None
    # 不是管理员登录
    if not is_admin_login:
        loger.info(f'{username}登录成功！')
    return user_dict
